Pular para o conteúdo principal

4.6.1. FFBeast Wheel – Volante Force Feedback DIY

Documentação Oficial

Introdução

O FFBeast Wheel é um volante Force Feedback construído em sistema DIY, que se conecta ao PC via USB como um dispositivo dual HID: uma interface customizada (Vendor‑specific) e outra padrão de joystick com suporte a Force Feedback.

Componentes e BOM

Lista de itens necessários (BOM) para montagem:

  • Controlador: ODrive v3.6 ou ODESC
  • Motor: Motor de hoverboard (≈ 15 Nm)
  • Encoder: MT6701 (absoluto incremental)
  • Mount: SK16 coupler + suporte impresso 3D
  • Breakout PCB: Adaptador entre ODrive e motor/encoder
  • Enclosure: Caixa impresso 3D ou comprada
  • Cabos e conectores: USB‑B, cabos de potência, jumper wires

1. Operação Básica

  1. Montagem mecânica dos componentes conforme instruções do repositório.
  2. Flash do firmware no controlador (ODrive/ODESC).
  3. Conexão USB: dispositivo aparece com VID=0x0451, PID=0xEEF8 (exemplo).
  4. Leitura e escrita via HID:
    • hid_read / hid_read_timeout
    • hid_get_feature_report
    • hid_write
  5. Uso de apps companion (Setup App / Commander App) para calibração, ajustes de gains e telemetria.

2. Fluxo de Execução

2.1 Montagem e Hardware

  1. Prepare chassis e fixações.
  2. Instale motor e encoder no suporte.
  3. Monte breakout PCB e conecte fiação.
  4. Prenda enclosure e organize cabos.

2.2 Firmware e Drivers

  1. Clone o repositório de firmware.
  2. Compile e faça o flash (ex: odrivetool dfu firmware.bin).
  3. Instale hidapi e drivers no SO:
    • Windows: zadig + libusb
    • Linux: sudo apt install libhidapi-dev

2.3 Conexão USB e Enumeração

hid_device_info *devs = hid_enumerate(0x0451, 0xEEF8);
// Filtrar interface_number == 0
hid_open_path(devs->path);

2.4 Protocolo de Comunicação

  • Pacotes HID: 65 bytes (1 byte ReportID + 64 bytes payload)

2.4.1 Leitura de Estado

uint8_t buf[65];
hid_read_timeout(handle, buf, sizeof(buf), 100);
memcpy(&state, &buf[1], sizeof(state));

2.4.2 Leitura de Feature Reports

uint8_t report[65];
hid_get_feature_report(handle, report, sizeof(report));

2.4.3 Envio de Comandos

uint8_t cmd[65] = { REPORT_GENERIC_INPUT_OUTPUT, /* ... payload */ };
hid_write(handle, cmd, sizeof(cmd));

3. Possibilidades de Uso

  • Force Feedback: Spring, Constant, Periodic, Ramp, Soft Stop, Damping
  • Customização de Efeitos: via Commander App ou protocolos de reporte
  • Mapeamento de botões/ixos (até 3 eixos analógicos, invert/smoothing)
  • Simulações HIL: integração com hardware externo
  • Streaming de Telemetria: para dashboards ou ML pipelines

4. Limitações

  • Taxa de leitura: ~10 Hz (100 ms timeout)
  • Botões em pulso (ButtonModeEnum 3–4) não implementados
  • Torque máximo: limitado ao motor usado
  • Padding obrigatório: pacotes cifrados/excedentes são descartados no Windows

5. Dificuldades Encontradas

  • Exemplos de tratamento de erros na comunicação HID insuficientes
  • Parâmetros de damping e gains requerem calibração manual
  • Manutenção do campo ReleaseMajor no firmware gera inconsistências

6. Limitações Reportadas

  • Modo avançado (serial key) só disponível via doações
  • Algumas instruções só estão documentadas em canais informais (Discord)

7. Métricas e Telemetria

MétricaDescrição
Position (±10000)Posição angular do volante
Torque (±10000)Torque aplicado pelo motor
FirmwareVersionVersão do firmware
SpringForce, DampingForceValores de força configurados
SamplingInterval (ms)Intervalo de leitura dos relatórios
  • Taxa de atualização: até 10 Hz sem travamentos
  • Formato de saída: relatórios binários via HID ou CSV

8. Funcionamento do Feedback

  1. Jogos enviam efeitos FFB via DirectInput/HID
  2. Firmware interpreta e converte em sinais PWM
  3. ODrive controla o motor para reproduzir o efeito
  4. Usuário sente forças: retorno, vibrações e resistências

9. Configuração via Serial

O FFBeast suporta ajuste dinâmico de parâmetros via interface serial após o flash do firmware, sem necessidade de recompilar o código.

  • Force Feedback: já vem implementado; o dispositivo é reconhecido como Joystick HID com FFB habilitado.
  • Parâmetros Dinâmicos: ganhos, filtros e PID podem ser configurados em tempo real.

Procedimento de uso:

  1. Conecte o FFBeast via USB e abra um terminal serial (baud 115200).
  2. Envie comandos, por exemplo:
    set gain 70
    get gain
    save
  3. Respostas típicas:
    Gain ajustado para: 70
    Current gain: 70
    Configuração salva

Trecho de command_parser.c:

if (strncmp(cmd, "set gain ", 9) == 0) {
ff_settings.gain = atoi(&cmd[9]);
printf("Gain ajustado para: %d
", ff_settings.gain);
}
if (strcmp(cmd, "get gain") == 0) {
printf("Current gain: %d
", ff_settings.gain);
}
if (strcmp(cmd, "save") == 0) {
saveConfig();
printf("Configuração salva
");
}

10. Requisitos

  • Jogo com suporte a Force Feedback
  • Drivers HID corretamente instalados
  • Configuração de dispositivo como volante FFB em plataformas (Steam, Windows)

Histórico de Versões

DataEditorDescrição
24/04/2025Mateus de AlmeidaDocumento inicial
25/04/2025Wengel RodriguesAtualização do doc